DISKCOPY
이 명령어는 원본 드라이브에 있는 플로피디스크의 내용을 목적지 드라이브에 있는 플로피디스크에 복사하기 위하여 사용한다.
여기에서 목적지 디스크가 포맷되어 있는가에 관계없이 항상 물리적인 복사를 하기 때문에 목적지 디스크에 저장되어 있는 모든 정보는 무시된다. 따라서 포맷되지 않은 디스크는 포맷을 실행한 다음에 정보를 복사하고, 목적지 디스크에 자료가 있으면 완전히 파괴된다.
DISKCOPY 명령어는 원본 디스크를 기준으로 복사하기 때문에 원본 디스크의 면당 트랙 수와 트랙당 섹터 수를 기준으로 사용한다.
DISKCOPY는 원본 디스크의 데이터를 저장하기 위해 하드디스크를 이용한다. 따라서, 고용량의 플로피디스크도 한번에 디스크 복사본을 만들 수 있다.
참고로 윈도우 탐색기에서 실행하는 디스크 복사 기능(Diskcopy.dll)은 디스크 복사본을 만들 때 하드디스크를 임시 저장 장소로 이용하지 않고 시스템 메모리를 이용하여 디스크 복사본을 만든다.
■ 명령어 위치
윈도우가 설치되어 있는 하드디스크(C:\Windows\Command)에 실행 파일 형태로 존재하는 외부 명령어
■ 사용법
DISKCOPY [dirve1: [drive2:]] [/1] [/V] [/M]
■ 옵션 및 매개변수

drive1: | 원본 디스크가 들어 있는 드라이브를 지정한다. 현행 드라이브가 플로피디스크 드라이브인 경우 생략할 수 있다.
drive2: | 목적지 디스크가 들어 있는 드라이브를 지정한다. 현행 드라이브가 플로피디스크 드라이브인 경우 생략할 수 있다.
/1 | 디스크의 첫번째 면만 복사한다.
/v | 정보가 정확히 복사되었는지를 검사한다. 이 옵션을 사용하는 경우, 디스크를 복사하는 속도가 느려진다.
/m | 원본의 데이터를 임시로 저장하는 장소로 하드디스크를 이용하지 않고 오직 상용 메모리만 이용하기 때문에 한 장의 디스켓을 복사하기 위해 여러 번 디스켓을 교환해줘야 한다.

■ 참고 사항
☞ 복사 방법
DISKCOPY 명령어는 원본 디스크를 물리적으로 복사한다. 따라서, 원본 디스크와 목적지 디스크는 동일한 면 수와, 트랙 수, 트랙당 섹터 수를 갖는다.
만약, 원본 디스크가 컴퓨터를 시동할 수 있는 시동 디스크라고 한다면 목적지도 시동 디스크가 되고, 원본 디스크에 베드 섹터가 있는 경우에는 목적지의 동일한 위치에 베드 섹터가 없는 경우에도 베드 섹터로 기록한다.
☞ DISKCOPY를 사용할 수 있는 드라이브
DISKCOPY 명령어는 플로피디스크에서만 사용할 수 있는 명령다. 즉, 하드디스크의 경우에는 DISKCOMP 명령을 사용할 수 없다.
만약 하드디스크를 원본이나 목적지 드라이브로 지정하면 다음과 같은 오류 메시지가 나타난다.
Invalid drive specification
Specified drive does not exist
or is non-removable
☞ DISKCOPY 메시지
DISKCOPY 명령어는 필요한 경우에 원본과 목적지 디스크를 넣으라는 메시지를 표시한 후 계속 작업하기 위하여 사용자가 임의의 키를 누를 때까지 대기한다. 디스크의 복사가 정상적으로 끝난 후, 다음과 같은 메시지가 나타난다.
Copy another diskette (Y/N)?
<Y>를 누르면 다음 디스크의 복사를 위하여 원본과 목적지 디스크를 넣으라는 메시지가 나타난다. 만약 위의 메시지가 나타날 때 디스크 복사를 더 이상 하지 않으려면 <N>을 누른다.
목적지에 포맷되지 않은 디스크를 넣고 DISKCOPY를 실행하면 원본의 디스크 상에 있는 것과 동일한 면 수와 트랙당 섹터 수로 포맷한 다음 디스크를 복사한다. 디스크를 포맷하고 파일을 복사하는 도중에 DISKCOPY는 다음과 같은 메시지를 보여준다.
Formatting while copying
만약, 원본 디스크의 용량보다 더 큰 목적지 디스크를 넣으면 다음과 같은 오류 메시지가 나타난다.
Drive types or diskette types not compatible
☞ 디스크의 일련 번호
원본 디스크에 일련 번호가 있는 경우 DISKCOPY는 목적지 디스크에 같은 일련 번호를 부여하지 않고 새로운 일련 번호를 부여한다.
그리고 난 후 DISKCOPY가 끝난 다음에 해당 일련 번호를 보여준다.
☞ 드라이브의 생략
사용자가 목적지 드라이브를 지정하지 않으면 현행 드라이브를 목적지 드라이브로 사용한다. 또한 원본 드라이브가 현행 드라이브인 경우에는 필요에 따라 원본과 목적지 디스크를 교환하라는 메시지가 나타난다.
만약, 원본과 목적지를 모두 생략하면 현행 드라이브를 원본과 목적지 드라이브로 사용한다. 이 경우 현행 드라이브는 반드시 A 혹은 B 드라이브여야 한다.
☞ 하나의 드라이브를 이용하여 복사하기
drive1:과 drive2:가 같은 드라이브라면 DISKCOPY는 필요한 경우에 원본과 목적지 디스크를 교환하라는 메시지를 보여주고 사용자가 임의의 키를 누를 때까지 대기한다.
만약, /m 옵션을 사용하여 복사하는 경우 DISKCOPY가 사용할 수 있는 시스템 메모리가 디스크의 용량보다 적은 경우에는 모든 정보를 한번에 읽을 수 없으므로 디스크를 한번 이상 교환해야 한다. 즉, 원본 디스크에서 정보를 읽어 메모리에 저장한 다음 목적지 디스크에 이를 기록하는데, 이 때 디스크의 정보를 모두 복사하지 못한 경우에는 다시 원본 디스크를 넣으라는 메시지가 나타난다. 이러한 과정은 디스크가 완전히 복사될 때까지 계속된다.
☞ 디스크 상의 파쇄 피하기
파쇄란 디스크 상에 있는 파일의 사이에 있는 사용하지 않는 조그만 공간을 의미한다.
DISKCOPY는 물리적으로 디스크를 복사하기 때문에 원본 디스크에 파쇄가 있는 경우에는 목적지 디스크에도 파쇄를 그대로 기록한다.
만약 이러한 디스크 상의 파쇄를 피하려면 Copy나 Xcopy 명령어를 사용한다.
Copy나 Xcopy는 디스크를 파일 단위로 연속적으로 복사하기 때문에 파쇄를 피할 수 있다. 그러나, 시스템 파일이 들어 있는 경우에는 Copy나 Xcopy 명령어를 이용하여 시스템을 전송할 수 없다.
☞ 종료 코드
디스크를 복사하는 도중에 일어날 수 있는 에러 수준에 대한 종료 코드를 운영 체제로 돌려준다.
이러한 종료 코드를 이용하면 배치 프로그램을 만들어 사용하면 DISKCOPY 명령어를 사용할 때 발생하는 오류를 정확하게 확인할 수 있다.
다음은 DISKCOPY가 시스템에 돌려주는 종료 코드의 에러 수준에 관한 설명이다.
0 디스크 복사가 성공적으로 이루어졌다.
1 치명적이지 않은 읽기와 쓰기 오류가 발생하였다.
2 사용자가 <Ctrl+C>를 눌러 복사를 중단하였다.
3 치명적인 디스크 오류가 발생하였다.
4 초기화 오류가 발견되었다.
위의 예에서 초기화 오류란 목적지로 하드디스크나 네트워크 드라이브 혹은 SUBST 명령어를 사용하여 방향 전환된 드라이브를 지정한 경우, 플로피디스크를 지정한 경우에도 용량이 같지 않은 디스크를 넣은 경우에 발생하는 오류다. 즉, 비교를 수행할 조건을 만족하지 않을 때 일어나는 오류를 의미한다.
■ 사용 예
다음은 DISKCOPY 명령어를 사용하여 디스크를 복사하는 과정에서 일어날 수 있는 에러 수준 종료 코드를 이용하여 배치 프로그램을 작성한 것이다.
rem DCOPY.BAT compares the disk in drive %1 and %2
@echo off
diskcopy %1 %2
if errorlevel 4 goto initialization_error
if errorlevel 3 goto hard_error
if errorlevel 2 goto break
if errorlevel 1 goto read/write_error
if errorlevel 0 goto diskcopy_ok
:initialization_error
echo 메모리가 부족하거나 명령어 형식이 틀립니다.
goto exit
:hard_error
echo 디스크에 복구할 수 없는 치명적인 오류가 발견되었습니다.
goto exit
:break
echo 사용자가 <Ctrl+C>를 눌러 디스크 복사를 취소했습니다.
goto exit
:read/write_error
echo 디스크에 치명적이지 않은 읽기 쓰기 오류가 발생하였습니다.
goto exit
:diskcopy_ok
echo 디스크 복사가 성공적으로 끝났습니다.
goto exit
:exit